#include "wx/wxprec.h"
#if wxUSE_SOCKETS && wxUSE_STREAMS

#include "wx/sckstrm.h"

#ifndef WX_PRECOMP
#include "wx/stream.h"
#endif

#include "wx/socket.h"

wxSocketOutputStream::wxSocketOutputStream( wxSocketBase& s )
  : m_o_socket( &s ) {
}

wxSocketOutputStream::~wxSocketOutputStream() {
}

size_t wxSocketOutputStream::OnSysWrite( const void *buffer, size_t size ) {
  size_t ret = m_o_socket->Write( ( const char * )buffer, size ).LastCount();
  m_lasterror = m_o_socket->Error() ? wxSTREAM_WRITE_ERROR : wxSTREAM_NO_ERROR;
  return ret;
}

wxSocketInputStream::wxSocketInputStream( wxSocketBase& s )
  : m_i_socket( &s ) {
}

wxSocketInputStream::~wxSocketInputStream() {
}

size_t wxSocketInputStream::OnSysRead( void *buffer, size_t size ) {
  size_t ret = m_i_socket->Read( ( char * )buffer, size ).LastCount();
  m_lasterror = m_i_socket->Error() ? wxSTREAM_READ_ERROR : wxSTREAM_NO_ERROR;
  return ret;
}

wxSocketStream::wxSocketStream( wxSocketBase& s )
  : wxSocketInputStream( s ), wxSocketOutputStream( s ) {
}

wxSocketStream::~wxSocketStream() {
}

#endif
